МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт про виконання лабораторної роботи №8
на тему: “ АРИФМЕТИЧНІ ОПЕРАЦІЇ МІКРОПРОЦЕСОРА Intel 8086(80286) ”
з курсу: “ Комп’ютери та мікропроцесорні системи ”
Виконав
студент групи КН-3
Львів - 2006
1. МЕТА РОБОТИ
Вивчити основні арифметичні операції мікропроцесора Intel 8086(80286).
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Арифметичні операції додавання та віднімання проводять за допомогою команд ADD та SUB. Нижче наведені можливі ситуації додавання та віднімання.
ADD AL,BL регістр+регістр
ADD AL,BYTEA регістр+пам’ять
ADD BYTEA,BL пам’ять+регістр
ADD AX,2010H регістр+безпосередні дані
ADD WORDA,2030H пам’ять+безпосередні дані
SUB AX,BX регістр-регістр
SUB AX,WORDA регістр-пам’ять
SUB WORDA,BX пам’ять-регістр
SUB BL,10H регістр-безпосередні дані
SUB WORDA,200H пам’ять-безпосередні дані
де: BYTEA - ім’я константи в пам’яті типу байт,
WORDA - ім’я константи в пам’яті типу слово.
У випадку, коли проводиться багатобайтове додавання чи віднімання, використовують додавання з переносом ADC та команду віднімання з позикою SBB. Їх форма запису аналогічна до команд ADD і SUB.
Особливу увагу необхідно звернути на переповнення, яке може відбутися при використанні вище наведених команд. Для прикладу, результат сумування в регістрі AL може перевищити його ємність і автоматично не переходить в регістр AH. Запобігти такій ситуації можна у випадку проведення сумування в двобайтових регістрах. Щоб перетворити байт у слово використовують команду CBW.
Для прикладу:
CBW ; розширити AL до AX
ADD AX,40H ; додати до AX
Аналогічна ситуація може відбутися і при додаванні двох двобайтових слів, які обмежені значенням від -32768 до +32768.
На відміну від асемблера МП КР580ВМ8080А в асемблері мікропроцесора Intel 8086(80286) присутні команди множення. Множення для беззнакових даних виконується командою MUL, а для знакових - IMUL. Існує дві основні операції множення:
Множення байт на байт . Перший множник міститься в регістрі AL, а другий - в байті пам’яті чи однобайтовому регістрі. Результат операції заноситься в регістр AX.
Приклад:
MUL BL
MUL BYTEA
Дані, які до виконання множення були в регістровій парі AX, не зберігаються.
Множення слова на слово. Перший множник міститься в регістрі AX, а другий - в слові пам’яті чи в регістрі. Після проведення операції, результат заноситься у подвійне слово, зокрема: старша(ліва) частина множення міститься в регістрі DX, а молодша (права) частина - в регістрі AX. Для прикладу приведемо множення регістр на регістр та регістр на пам’ять:
MUL BX
MUL WORDA
На практиці зустрічається ряд нестандартних ситуацій множення. Зокрема, множення на степінь 2. (2,4,8 і т.д.), множення константи розміром байт на константу розміром слово та множення багатобайтових слів. У першому випадку ефективніше організовувати алгоритм множення через зсув вліво на необхідну кількість бітів. При множенні байта на слово, необхідно, за допомогою команди CBW, переписати константу типу байт в слово і лише після цього проводити стандартне множення. Множення великих чисел потребує додаткових дій. Один зі шляхів отримання результату такого множення передбачає множення кожного слова окремо, а потім сумування отриманих результатів. Для прикладу, розглянемо аналогічне множення в десятковому форматі:
2211
22
------
4422
4422
--------
48642
Припустимо, що десяткова арифметика дозволяє перемножи-ти лише двозначні числа. Тоді, можна перемножити 22 і 11 на 22 окремо:
22 11
22 22
--- ---
44 22
44 22
------ ----
484 242
Наступний крок полягає в сумуванні отриманих чисел, але з врахуванням, що перше число 22 представляє сотні. В результаті отримаємо:
48400
242
--------
48642
При побудові асемблерних програм для перемноження багатобайтових конс...